home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 44
/
Aminet 44 (2001)(GTI - Schatztruhe)[!][Aug 2001].iso
/
Aminet
/
comm
/
misc
/
Sashi89.lha
/
Sashi89
/
sources
/
list.c
< prev
next >
Wrap
C/C++ Source or Header
|
2001-05-05
|
2KB
|
105 lines
#include <stdio.h>
#include <stdlib.h>
#include "list.h"
void List_Init(struct List_List *list)
{
list->first = NULL;
list->last = NULL;
}
void *List_Push(struct List_List *list, size_t size)
{
struct List_Node *new;
void *content;
new = malloc(sizeof(struct List_Node));
content = malloc(size);
if ( ! new || ! content )
{
free(new);
free(content);
return(NULL);
}
new->prev = NULL;
new->next = list->first;
if ( list->first == NULL )
list->last = new;
else
list->first->prev = new;
list->first = new;
printf("new=%p\n",new);
printf("content=%p\n",content);
new->content = content;
return(content);
}
void *List_Top(struct List_List *list)
{
if ( list->first == NULL )
return(NULL);
return(list->first->content);
}
void List_Pop(struct List_List *list)
{
struct List_Node *newfirst;
if ( ! list->first )
return;
newfirst = list->first->next;
free(list->first->content);
free(list->first);
list->first = newfirst;
}
void List_Invert(struct List_List *list)
{
struct List_Node *temp;
struct List_Node *current;
current = list->first;
while ( current )
{
temp = current->next;
current->next = current->prev;
current->prev = temp;
current = temp;
}
temp = list->first;
list->first = list->last;
list->last = temp;
}
/* Hack */
void List_Print(struct List_List *list)
{
struct List_Node *current;
current = list->first;
while ( current )
{
printf("current = %p\n",current);
printf("content = %p\n",current->content);
printf("N%d\n",*((int*)current->content));
current = current->next;
}
}